#include <bits/stdc++.h>
using namespace std;


// //栈模拟
// class Solution {
// public:
//     bool backspaceCompare(string s, string t) {
//         stack<char> stk1, stk2;
//         for(auto& chr: s){
//             if(!stk1.empty() && chr=='#') stk1.pop();
//             else if(chr!='#') stk1.push(chr);
//         }
//         for(auto& chr: t){
//             if(!stk2.empty() && chr=='#') stk2.pop();
//             else if(chr!='#') stk2.push(chr);
//         }
//         return stk1==stk2;
//     }
// };

//双指针
class Solution {
public:
    bool backspaceCompare(string s, string t) {
        int ns = s.size();
        int nt = t.size();
        int ps = ns-1; int pt = nt-1;
        int cnts = 0; int cntt = 0;
        while(ps>-1 || pt>-1){
            while(ps>-1){
                if(s[ps]=='#'){
                    ++cnts;
                    --ps;
                }
                else{
                    if(cnts>0){
                        --cnts;
                        --ps;
                    }
                    else break;
                }
            }
            while(pt>-1){
                if(t[pt]=='#'){
                    ++cntt;
                    --pt;
                }
                else {
                    if(cntt>0){
                        --cntt;
                        --pt;
                    }
                    else break;
                }
            }
            if(ps>-1 && pt>-1){
                if(s[ps]!=t[pt]) return false;
            }
            else if((ps>-1)^(pt>-1)) return false;
            --ps;
            --pt;
        }
        return true;
    }
};